package org.opens.hutool.hutoolAssert;

import cn.hutool.core.lang.Assert;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AssertToString {

    /**
     * 功能:
     * <p>断言简单类型参数</p>
     * 输出:
     * <pre>
     *      java.lang.IllegalArgumentException: id不能为null
     *      java.lang.IllegalArgumentException: str不能为空
     * </pre>
     * 说明:
     * <pre>
     *     1.
     * </pre>
     */
    @Test
    public void test18() {
        Integer id = null;
        try {
            Assert.notNull(id, "id不能为null");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }

        String str = "";
        try {
            Assert.notEmpty(str, "str不能为空");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能:
     * <p>使用hutool的断言来描述集合, map, 数组</p>
     * 输出:
     * <pre>
     *      java.lang.IllegalArgumentException: 操作对象不能为空
     *      java.lang.IllegalArgumentException: 操作map不能为空
     *      java.lang.IllegalArgumentException: 操作arr不能为空
     * </pre>
     * 说明:
     * <pre>
     *     1.
     * </pre>
     */
    @Test
    public void test42() {
        List<Integer> list = new ArrayList<>();
        try {
            Assert.notEmpty(list, "操作对象不能为空");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }

        Map<String, Object> map = new HashMap<>();
        try {
            Assert.notEmpty(map, "操作map不能为空");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }

        Integer[] arr = new Integer[]{};
        try {
            Assert.notEmpty(arr, "操作arr不能为空");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能:
     * <p>断言状态转换过程</p>
     * 输出:
     * <pre>
     *      1. java.lang.IllegalStateException: 提交的知识只能是待提交状态的, 这是传递的信息1, 这是传递的信息2
     * </pre>
     * 说明:
     * <pre>
     *     1. 有些业务场景下要求状态变化必须从A-> B, 如果从C-> B变化就需要抛出异常.
     * </pre>
     */
    @Test
    public void test94() {
        int state1 = 1;
        int state2 = 2;
        try {
            Assert.state(state1 == 2, "提交的知识只能是待提交状态的, {}, {}", "这是传递的信息1", "这是传递的信息2");
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }

}
